package Service

import (
	"bufio"
	"io"
	"os"
	"strings"
)

var Config map[string]string

func InitReadConfig(path string) error {
	// 创建一个新的 map 用于存储配置信息
	config := make(map[string]string)

	// 尝试打开指定路径的文件
	f, err := os.Open(path)
	// 如果打开文件时发生错误，返回 nil 和该错误
	if err != nil {
		return err
	}
	// 函数结束时关闭文件
	defer f.Close()

	// 创建一个新的 bufio.Reader 用于从文件中读取数据
	r := bufio.NewReader(f)
	// 无限循环，直到遇到文件结束或发生错误
	for {
		// 读取文件中的一行数据，并去除行末的空格和换行符
		b, _, err := r.ReadLine()
		// 如果读取数据时发生错误，判断是否为文件结束标志
		if err != nil {
			// 如果是文件结束标志，退出循环
			if err == io.EOF {
				break
			}
			// 如果不是文件结束标志，返回 nil 和该错误
			return err
		}
		// 将读取到的字节数据转换为字符串，并去除字符串两端的空格
		s := strings.TrimSpace(string(b))
		// 判断字符串中是否包含等号，如果不包含则跳过当前循环
		index := strings.Index(s, "=")
		if index < 0 {
			continue
		}
		// 从字符串中提取键，即等号左边的部分，并去除两端的空格
		key := strings.TrimSpace(s[:index])
		// 如果键的长度为 0，则跳过当前循环
		if len(key) == 0 {
			continue
		}
		// 从字符串中提取值，即等号右边的部分，并去除两端的空格
		value := strings.TrimSpace(s[index+1:])
		// 如果值的长度为 0，则跳过当前循环
		if len(value) == 0 {
			continue
		}
		// 将提取到的键值对添加到 map 中
		config[key] = value
	}
	Config = config
	// 返回存储配置信息的 map 和 nil 表示没有发生错误
	return nil
}
